package com.unbiz.common.convert.object;

import java.util.Calendar;
import java.util.Date;

import com.unbiz.common.StringUtil;
import com.unbiz.common.convert.ConvertException;
import com.unbiz.common.convert.ObjectConverter;
import com.unbiz.common.convert.TypeConverter;
import com.unbiz.common.date.DatetimeObject;
import com.unbiz.either.Pair;
import com.unbiz.tuple.Tuple;
import com.unbiz.tuple.Tuple2;

/**
 * 
 * @author <a href="mailto:xuchen06@baidu.com">xuc</a>
 * @version create on 2014年9月19日 下午3:19:44
 */
public class PairConverter extends ObjectConverter<Pair> implements TypeConverter<Pair> {

    @Override
    public Pair toConvert(String value) {
        return convert(value);
    }

    @Override
    public String fromConvert(Pair value) {
        return String.valueOf(value);
    }

    public Pair toConvert(Object value) {
        if (value instanceof Pair) {
            return (Pair) value;
        }
        if (value instanceof Tuple2) {
        	Tuple2 t2 = (Tuple2) value;
            return new Pair(t2.get(0),t2.get(1));
        }       
        if (value instanceof Number[]) {
        	Number[] t2 = (Number[]) value;
            return new Pair(t2[0],t2[1]);
        }
        return convert(value.toString());

    }

    private Pair convert(String value) {
        String stringValue = value.trim();
        String[] tup = StringUtil.split(stringValue,",:\t");
        Object obj = tup[0];
        Object obj2 = tup[1];
        if (StringUtil.isDigits(tup[0])) {
        	obj = Long.parseLong(tup[0]);          
        }
        if (StringUtil.isDigits(tup[1])) {
        	obj2 = Long.parseLong(tup[1]);          
        }
        return Pair.of(obj, obj2);
    }

}
